const util = require('../../utils/util.js')
const API = require('../../utils/api.js')
const app = getApp()
var timerName

Page({

  /**
   * 页面的初始数据
   */
  data: {
    type: "",//打开此页面的用户类型，为customer,seller或transporter
    autoScan: null,
    showTopText: false,
    topText: "",
    context: null,
    choosedImagePath: "",//手动选择的图片路径
    location: "",//物流商记录物流信息的地址
    scanResult: null, // 存储扫描结果
    showResult: false, // 是否显示结果卡片
    countDown: 10, // 倒计时秒数
    dotAnimation: false, // 控制点阵动画状态
    currentTab: 'file', // 当前选中的标签页
    fileList: [], // 文件列表
    showScanAnimation: false, // 是否显示扫描动画
    showScanSuccess: false, // 是否显示扫描成功提示
    // 人脸识别相关数据
    showFaceRecognition: false, // 是否显示人脸识别界面
    faceDetecting: false, // 是否正在检测人脸
    faceStatusText: '请将面部放在识别框内', // 人脸识别状态文字
    faceContext: null, // 人脸识别摄像头上下文
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    this.setData({
      type: options.type,
      location: options.location || "",
      context: wx.createCameraContext()
    })
    
    // 初始化文件列表
    this.initFileList();
  },
  
  /**
   * 初始化文件列表
   */
  initFileList: function() {
    // 检查是否有全局文件列表
    if (app.globalData && app.globalData.fileList) {
      this.setData({
        fileList: app.globalData.fileList
      });
    }
  },
  
  /**
   * 处理格式卡片点击
   */
  handleFormatTap: function(e) {
    const formatType = e.currentTarget.dataset.type;
    const formatNames = {
      pdf: 'PDF文档',
      word: 'Word文档', 
      excel: 'Excel表格',
      image: '图片格式'
    };
    
    wx.showToast({
      title: `选择了${formatNames[formatType]}`,
      icon: 'success',
      duration: 1500
    });
  },

  /**
   * 拍照扫描
   */
  takePicture: function() {
    this.startScanAnimation();
  },

  /**
   * 从相册选择
   */
  chooseFromAlbum: function() {
    let that = this;
    wx.chooseImage({
      count: 1,
      sizeType: ['original', 'compressed'],
      sourceType: ['album'],
      success: function(res) {
        that.setData({
          choosedImagePath: res.tempFilePaths[0]
        });
        that.showMockResult();
      }
    });
  },

  /**
   * 批量导出
   */
  batchExport: function() {
    // 启动人脸识别
    this.startFaceRecognition();
  },

  /**
   * 启动人脸识别
   */
  startFaceRecognition: function() {
    const that = this;
    
    wx.showModal({
      title: '身份验证',
      content: '批量打印需要进行身份验证，是否开始人脸识别？',
      confirmText: '开始识别',
      cancelText: '取消',
      success: function(res) {
        if (res.confirm) {
          that.showFaceRecognitionCamera();
        }
      }
    });
  },

  /**
   * 显示人脸识别摄像头
   */
  showFaceRecognitionCamera: function() {
    this.setData({
      showFaceRecognition: true,
      faceStatusText: '请将面部放在识别框内',
      faceContext: wx.createCameraContext()
    });
    
    // 开始人脸检测动画
    this.startFaceDetectionAnimation();
  },

  /**
   * 开始人脸检测动画
   */
  startFaceDetectionAnimation: function() {
    const that = this;
    
    this.setData({
      faceDetecting: true,
      faceStatusText: '正在检测人脸...'
    });
    
    // 模拟人脸检测过程
    setTimeout(() => {
      if (this.data.showFaceRecognition) {
        that.setData({
          faceStatusText: '检测到人脸，正在识别...'
        });
        
        // 检测到人脸后自动开始识别
        setTimeout(() => {
          if (that.data.showFaceRecognition) {
            that.autoCaptureFace();
          }
        }, 1000);
      }
    }, 2000);
  },

  /**
   * 自动拍摄人脸进行识别
   */
  autoCaptureFace: function() {
    const that = this;
    
    if (!this.data.faceContext) {
      wx.showToast({
        title: '摄像头未就绪',
        icon: 'none',
        duration: 2000
      });
      return;
    }

    this.setData({
      faceStatusText: '正在拍摄...'
    });

    // 使用摄像头拍照
    this.data.faceContext.takePhoto({
      quality: 'high',
      success: (res) => {
        that.setData({
          faceStatusText: '正在分析面部特征...'
        });
        
        // 进行人脸识别
        that.performFaceRecognition(res.tempImagePath);
      },
      fail: (err) => {
        console.error('拍照失败:', err);
        // 拍照失败时重新开始检测
        that.setData({
          faceStatusText: '拍照失败，重新检测中...'
        });
        
        setTimeout(() => {
          if (that.data.showFaceRecognition) {
            that.startFaceDetectionAnimation();
          }
        }, 1500);
      }
    });
  },

  /**
   * 执行人脸识别
   */
  performFaceRecognition: function(imagePath) {
    const that = this;
    
    // 模拟人脸识别API调用
    setTimeout(() => {
      // 模拟识别结果（实际项目中这里会调用真实的人脸识别API）
      const recognitionSuccess = Math.random() > 0.2; // 80%成功率
      
      if (recognitionSuccess) {
        that.onFaceRecognitionSuccess();
      } else {
        that.onFaceRecognitionFailed();
      }
    }, 3000);
  },

  /**
   * 人脸识别成功
   */
  onFaceRecognitionSuccess: function() {
    this.setData({
      showFaceRecognition: false,
      faceDetecting: false
    });
    
    wx.showToast({
      title: '身份验证成功',
      icon: 'success',
      duration: 1500,
      success: () => {
        // 跳转到批量打印页面
        setTimeout(() => {
          wx.navigateTo({
            url: '/pages/batchPrint/batchPrint'
          });
        }, 1500);
      }
    });
  },

  /**
   * 人脸识别失败
   */
  onFaceRecognitionFailed: function() {
    const that = this;
    
    this.setData({
      faceStatusText: '识别失败，正在重新检测...'
    });
    
    // 自动重试，延迟2秒后重新开始检测
    setTimeout(() => {
      if (that.data.showFaceRecognition) {
        that.startFaceDetectionAnimation();
      }
    }, 2000);
  },

  /**
   * 取消人脸识别
   */
  cancelFaceRecognition: function() {
    this.setData({
      showFaceRecognition: false,
      faceDetecting: false,
      faceStatusText: '请将面部放在识别框内'
    });
  },

  /**
   * 扫描设置
   */
  scanSettings: function() {
    wx.showToast({
      title: '设置功能开发中',
      icon: 'none',
      duration: 2000
    });
  },

  /**
   * 开始扫描文档
   */
  startScan: function() {
    this.startScanAnimation();
  },

  /**
   * 启动点阵随机变化动画
   */
  startDotAnimation: function() {
    // 随机变化点阵，增强扫描效果真实感
    const animInterval = setInterval(() => {
      if (!this.data.showScanAnimation) {
        clearInterval(animInterval); // 关闭扫描动画时停止点阵动画
        return;
      }
      
      this.setData({
        dotAnimation: !this.data.dotAnimation
      });
    }, 600);
  },

  /**
   * 显示扫描动画
   */
  startScanAnimation: function() {
    this.setData({
      showScanAnimation: true
    });
    
    // 启动点阵动画
    this.startDotAnimation();
    
    // 模拟扫描过程，5秒后显示结果
    setTimeout(() => {
      if (this.data.showScanAnimation) {
        this.showMockResult();
      }
    }, 5000);
  },
  
  /**
   * 取消扫描
   */
  cancelScan: function() {
    this.setData({
      showScanAnimation: false,
      dotAnimation: false
    });
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    // 初始加载不自动启动扫描
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {
    clearTimeout(timerName);
  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {
    clearTimeout(timerName);
    // 重置页面状态
    this.resetPageState();
  },
  
  /**
   * 重置页面状态
   */
  resetPageState: function() {
    this.setData({
      showResult: false,
      showScanSuccess: false,
      showScanAnimation: false,
      dotAnimation: false,
      scanResult: null,
      choosedImagePath: ""
    });
  },
  
  /**
   * 切换底部导航标签
   */
  switchTab: function(e) {
    const tab = e.currentTarget.dataset.tab;
    
    if (tab === 'history') {
      // 跳转到溯源记录页
      wx.navigateTo({
        url: '/pages/queryHistory/queryHistory'
      });
    } else if (tab === 'file') {
      // 当前页面，无需处理
    } else if (tab === 'user') {
      // 跳转到个人中心
      wx.navigateTo({
        url: '/pages/mine/mine'
      });
    }
  },
  
  /**
   * 选择文件
   */
  chooseFile: function() {
    let that = this;
    
    // 微信小程序限制了文件选择功能，改为选择图片
    wx.showActionSheet({
      itemList: ['选择图片', '拍照'],
      success: function(res) {
        if (res.tapIndex === 0 || res.tapIndex === 1) {
          // 选择图片或拍照
          wx.chooseImage({
            count: 1,
            sizeType: ['original', 'compressed'],
            sourceType: res.tapIndex === 0 ? ['album'] : ['camera'],
            success: function(res) {
              that.setData({
                choosedImagePath: res.tempFilePaths[0]
              });
              
              // 显示模拟结果
              that.showMockResult();
            }
          });
        }
      }
    });
  },
  
  /**
   * 点击PDF文件图标
   */
  tapPdfIcon: function() {
    this.showFileTypeInfo('PDF文件');
  },
  
  /**
   * 点击DOC文件图标
   */
  tapDocIcon: function() {
    this.showFileTypeInfo('Word文档');
  },
  
  /**
   * 点击XLS文件图标
   */
  tapXlsIcon: function() {
    this.showFileTypeInfo('Excel表格');
  },
  
  /**
   * 点击IMG文件图标
   */
  tapImgIcon: function() {
    this.showFileTypeInfo('图片文件');
  },
  
  /**
   * 显示文件类型信息
   */
  showFileTypeInfo: function(fileType) {
    wx.showModal({
      title: fileType,
      content: `支持${fileType}格式的文件溯源，点击上传按钮选择文件进行溯源`,
      showCancel: false
    });
  },

  /**
   * 自动拍照上传
   */
  takePic: function (context) {
    let that = this
    if(!that.data.autoScan){
      return
    }
    that.setData({
      topText: "拍照中"
    })
    context.takePhoto({
      quality: "high",
      success(res) {
        // 记录图片路径
        that.setData({
          choosedImagePath: res.tempImagePath
        })
        
        // 开始扫描倒计时
        that.startScanCountDown()
      }
    })
  },

  /**
   * 手动选择图片上传
   */
  tapImage: function() {
    let that = this
    wx.chooseImage({
      count:1,
      sizeType:['original','compressed'],
      sourceType:['album','camera'],
      success(res){
        that.setData({
          choosedImagePath: res.tempFilePaths[0]
        })
        
        // 开始扫描倒计时
        that.startScanCountDown()
      }
    })
  },

  /**
   * 开始扫描倒计时，10秒后显示结果
   */
  startScanCountDown: function() {
    let that = this;
    
    // 设置初始状态
    that.setData({
      countDown: 10,
      topText: "文件识别中，请稍候"
    });
    
    // 启动倒计时
    let timer = setInterval(function() {
      let countDown = that.data.countDown;
      countDown--;
      
      that.setData({
        countDown: countDown
      });
      
      if (countDown <= 0) {
        // 清除定时器
        clearInterval(timer);
        
        // 显示模拟结果
        that.showMockResult();
      }
    }, 1000);
  },

  /**
   * 显示模拟结果
   */
  showMockResult: function() {
    let that = this
    
    // 生成一个随机的文档ID
    const docId = 'DOC' + Math.floor(Math.random() * 1000000);
    
    // 当前日期和时间格式化
    const currentTime = util.formatTime(new Date());
    
    // 模拟扫描结果数据 - 文档类型
    const mockResult = {
      id: docId,
      name: '合同文件.pdf',
      imageUrl: '/images/pic.png',
      produceTime: '2025年5月14日',
      producer: {
        name: '张三',
        tel: '18945612344'
      },
      category: '权限部门',
      fileType: 'PDF文档',
      pageCount: '6页'
    }
    
    // 停止扫描动画
    this.setData({
      showScanAnimation: false,
      dotAnimation: false
    });
    
    // 先显示扫描成功提示
    this.setData({ showScanSuccess: true });
    
    // 2秒后显示结果并隐藏成功提示
    setTimeout(() => {
      this.setData({
        showScanSuccess: false,
        scanResult: mockResult,
        showResult: true
      });
      
      // 在全局保存最新扫描结果，以便在主页显示
      app.globalData.lastScanResult = mockResult;
    }, 2000);
  },
  
  /**
   * 带数据返回首页
   */
  returnWithData: function(data) {
    // 构建新的文件卡片数据
    const fileCard = {
      id: data.id,
      name: data.name,
      icon: data.imageUrl || '/images/pic.png',
      date: '刚刚添加',
      creator: data.producer ? data.producer.name : '未知',
      createTime: data.produceTime,
      contact: data.producer ? data.producer.tel : '未知',
      fileInfo: data.id,
      fileType: data.fileType,
      pageCount: data.pageCount,
      category: data.category
    };
    
    // 全局存储数据
    if (!app.globalData.fileList) {
      app.globalData.fileList = [];
    }
    
    // 添加到全局文件列表的头部
    app.globalData.fileList.unshift(fileCard);
    
    // 设置最近一次扫描结果
    app.globalData.lastScanResult = data;
    
    // 返回上一页
    wx.navigateBack({
      delta: 1
    });
  },

  
  // 用户点击确定按钮，返回首页
  confirmAndReturn: function() {
    this.returnWithData(this.data.scanResult);
  },
  
  // 用户点击下载按钮
  downloadFile: function() {
    wx.showToast({
      title: '正在下载...',
      icon: 'loading',
      duration: 1500
    });
    
    // 模拟下载过程
    setTimeout(function() {
      wx.showToast({
        title: '下载成功',
        icon: 'success',
        duration: 1500
      });
    }, 1500);
  },
  
  // 用户点击删除按钮
  deleteFile: function() {
    let that = this;
    wx.showModal({
      title: '确认删除',
      content: '确定要删除该文件吗？',
      success: function(res) {
        if (res.confirm) {
          wx.showToast({
            title: '删除成功',
            icon: 'success',
            duration: 1500
          });
          
          // 隐藏结果卡片
          that.setData({
            showResult: false
          });
        }
      }
    });
  },
  
  // 前往溯源记录页面
  goToHistory: function() {
    // 先将扫描结果添加到全局数据中
    this.returnWithData(this.data.scanResult);
    
    // 重置当前页面状态，确保下次返回时显示初始界面
    this.resetPageState();
    
    // 跳转到首页
    wx.switchTab({
      url: '/pages/index/index'
    });
  }
}) 